"""
Python文件读写基础

文件读写是程序开发中的基础功能，特别是在AI应用中，我们需要:
- 读取数据和配置文件
- 保存模型预测结果和日志
- 处理用户输入和输出
"""

print("="*50)
print("Python文件读写基础")
print("="*50)

# =============== 1. open函数 - 打开文件 ===============

print("\n1. open函数 - 打开文件")
print("-"*40)

print("""
open函数是Python打开文件的基本方式，基本语法：
    
    file_object = open(file_path, mode)

参数说明：
- file_path: 文件路径（可以是相对路径或绝对路径）
- mode: 打开模式（'r'表示读取，'w'表示写入）
    
打开文件后，必须记得关闭文件（使用file_object.close()）
""")

# =============== 2. 文件打开模式 ===============

print("\n2. 文件打开模式")
print("-"*40)

print("""
两种基本的文件打开模式：

1. 'r' - 读取模式（Read）:
   - 用于读取已存在的文件
   - 如果文件不存在，会引发FileNotFoundError错误
   - 文件指针位于文件开头

2. 'w' - 写入模式（Write）:
   - 用于写入文件
   - 如果文件不存在，会创建新文件
   - 如果文件已存在，会覆盖原有内容
   - 文件指针位于文件开头
""")

# =============== 3. 读取文件内容 ===============

print("\n3. 读取文件内容")
print("-"*40)

# 创建一个用于演示的文本文件
demo_file_path = "example_text.txt"

# 先创建一个示例文件
try:
    # 打开文件用于写入
    file = open(demo_file_path, 'w')
    
    # 写入一些内容
    file.write("这是第一行内容。\n")
    file.write("这是第二行内容。\n")
    file.write("这是第三行内容。\n")
    file.write("这是第四行内容，包含数字123。\n")
    file.write("这是最后一行内容。")
    
    # 关闭文件
    file.close()
    print(f"已创建示例文件：{demo_file_path}")
except Exception as e:
    print(f"创建示例文件时出错：{e}")

print("\n3.1 读取整个文件内容:")
try:
    # 打开文件用于读取
    file = open(demo_file_path, 'r')
    
    # 读取整个文件内容
    content = file.read()
    
    # 关闭文件
    file.close()
    
    print("文件全部内容:\n" + "-"*20)
    print(content)
except Exception as e:
    print(f"读取文件时出错：{e}")

print("\n3.2 逐行读取文件:")
try:
    # 打开文件用于读取
    file = open(demo_file_path, 'r')
    
    # 逐行读取
    print("逐行读取内容:\n" + "-"*20)
    line_num = 1
    for line in file:
        print(f"行 {line_num}: {line.strip()}")  # strip()用于去除行尾的换行符
        line_num += 1
    
    # 关闭文件
    file.close()
except Exception as e:
    print(f"读取文件时出错：{e}")

print("\n3.3 读取指定数量的字符:")
try:
    # 打开文件用于读取
    file = open(demo_file_path, 'r')
    
    # 读取前10个字符
    first_10_chars = file.read(10)
    
    # 再读取接下来的10个字符
    next_10_chars = file.read(10)
    
    # 关闭文件
    file.close()
    
    print(f"前10个字符: '{first_10_chars}'")
    print(f"接下来10个字符: '{next_10_chars}'")
except Exception as e:
    print(f"读取文件时出错：{e}")

print("\n3.4 读取所有行到列表:")
try:
    # 打开文件用于读取
    file = open(demo_file_path, 'r')
    
    # 读取所有行到列表（每行作为列表的一个元素）
    lines = file.readlines()
    
    # 关闭文件
    file.close()
    
    print("所有行的列表:")
    for i, line in enumerate(lines):
        print(f"lines[{i}]: {line.strip()}")
except Exception as e:
    print(f"读取文件时出错：{e}")

print("\n3.5 读取单行:")
try:
    # 打开文件用于读取
    file = open(demo_file_path, 'r')
    
    # 读取第一行
    first_line = file.readline()
    
    # 读取第二行
    second_line = file.readline()
    
    # 关闭文件
    file.close()
    
    print(f"第一行: {first_line.strip()}")
    print(f"第二行: {second_line.strip()}")
except Exception as e:
    print(f"读取文件时出错：{e}")

# =============== 4. 写入文件内容 ===============

print("\n4. 写入文件内容")
print("-"*40)

print("\n4.1 基本写入:")
try:
    # 打开文件用于写入（这会覆盖原有内容）
    file = open("output_example.txt", 'w')
    
    # 写入字符串
    file.write("这是写入的第一行。\n")
    file.write("这是写入的第二行。\n")
    
    # 关闭文件
    file.close()
    
    print("已成功写入内容到 output_example.txt")
except Exception as e:
    print(f"写入文件时出错：{e}")

print("\n4.2 写入多行:")
try:
    # 准备要写入的多行内容
    lines = [
        "这是第一行内容\n",
        "这是第二行内容\n",
        "这是第三行内容\n",
        "这是最后一行内容"
    ]
    
    # 打开文件用于写入
    file = open("multiline_example.txt", 'w')
    
    # 写入多行
    file.writelines(lines)
    
    # 关闭文件
    file.close()
    
    print("已成功写入多行内容到 multiline_example.txt")
except Exception as e:
    print(f"写入文件时出错：{e}")

print("\n4.3 写入不同类型的数据:")
try:
    # 打开文件用于写入
    file = open("mixed_data_example.txt", 'w')
    
    # 写入不同类型的数据（需要转换为字符串）
    file.write("整数: " + str(42) + "\n")
    file.write("浮点数: " + str(3.14159) + "\n")
    file.write("布尔值: " + str(True) + "\n")
    
    # 写入列表（需要转换为字符串）
    my_list = [1, 2, 3, 4, 5]
    file.write("列表: " + str(my_list) + "\n")
    
    # 写入字典（需要转换为字符串）
    my_dict = {"name": "Python", "type": "编程语言", "year": 1991}
    file.write("字典: " + str(my_dict))
    
    # 关闭文件
    file.close()
    
    print("已成功写入混合数据到 mixed_data_example.txt")
except Exception as e:
    print(f"写入文件时出错：{e}")
    

print("\n" + "="*50)
print("文件读写注意事项")
print("-"*40)
print("""
1. 始终记得关闭文件 - 使用file.close()
2. 处理文件操作时使用try-except捕获可能的异常
3. 'r'模式打开不存在的文件会引发错误
4. 'w'模式会覆盖已有文件内容
5. 写入非字符串数据前需要转换为字符串
6. 读取位置受文件指针影响，read()后再read()会从上次结束位置开始
""")

print("\n文件读写在AI应用开发中非常重要，它是处理数据、保存结果的基础。")
print("="*50)
